/**
 * 版权所有 (C), 2019-2019, XXX有限公司
 * 项目名：com.company.study.dsa.stack
 * 文件名: MyStack
 * 日期: 2019/6/17 20:41
 * 说明:
 */
package com.company.study.dsa.stack;

/**
 * 栈的数据结构
 *
 * @author Anbang713
 * @create 2019/6/17
 */
public class MyStack {

    private int[] array;
    private int maxSize;
    private int top;

    /**
     * 初始化一个指定最大容量的栈
     *
     * @param maxSize 最大容量
     */
    public MyStack(int maxSize) {
        this.maxSize = maxSize;
        array = new int[maxSize];
        top = -1;
    }

    /**
     * 进栈，满栈时不处理
     *
     * @param value
     */
    public void push(int value) {
        if (top < maxSize - 1) {
            array[++top] = value;
        }
    }

    /**
     * 出栈
     *
     * @return
     * @throws Exception 空栈时，抛出异常
     */
    public int pop() throws Exception {
        if (isEmpty()) {
            throw new Exception("当前为空栈，无法执行出栈");
        }
        return array[top--];
    }

    /**
     * 访问栈顶元素
     *
     * @return
     * @throws Exception 空栈时，抛出异常
     */
    public int peek() throws Exception {
        if (isEmpty()) {
            throw new Exception("当前为空栈，无法访问栈顶元素");
        }
        return array[top];
    }

    /**
     * 是否为空栈
     *
     * @return
     */
    public boolean isEmpty() {
        return top == -1;
    }

    /**
     * 是否为满栈
     *
     * @return
     */
    public boolean isFull() {
        return top == maxSize - 1;
    }
}